<?
/**********************************************************************
 *                                                                    *    
 * Copyright (c) 2009 Dmytro Bezhnar. All rights reserved.     			  *
 *                                                                    *
 **********************************************************************/


/**
 * Константа содержит URL страницы залогирования
 *
 */

define('FORWARD_LOGIN', '?target=login');

/**
 * Класс - ядро
 *
 * @version $Id: Controller.php,v 1.76 2008/10/15 13:43:23 demonit Exp $
 */

class Controller extends AbstractManager 
{
	/**
	 * Масив входных данных
	 *
	 * @var array
	 */
	 private $param=array();
	 
	 private $smarty_plugins_dir = array('plugins','../../core2/lib/Smarty/plugins');
	 
	 /**
	  * Масив названий входных переменых которые должны проверятся как строковые
	  *
	  * @var array
	  */
	 
	 protected $param_str=array();
	 
	 /**
	  * URL по которому производится редирект после POST выполнения
	  *
	  * @var string
	  */
	 
	 public $returnUrl = null;

	 /**
	  * Содержит коректность хода работы скрипта
	  *
	  * @var Auth
	  */
	 
	 public $psp_auth;
	 
	 /**
	  * Содержит коректность хода работы скрипта
	  *
	  * @var Auth
	  */
	 
	 public $path;
	 
	 /**
	  * Содержит коректность хода работы скрипта
	  *
	  * @var 
	  */
	 
	 public $cache;
	 
	  /**
	  * Массив JavaScript-ов, которых необходимо подключить
	  *
	  * @var array
	  */
	 
	 public $javascript = array();
	 
	 /**
	  * Массив gemius-ов, которых необходимо подключить
	  *
	  * @var array
	  */
	 
	 public $gemius = array();
	 
	 
	  /**
	  * Масив скриптов, работающих на mootools технологии
	  *
	  * @var array
	  */
	 
	 public $mootools = array();
	 
	  /**
	  * Массив JavaScript-классов на MooTools, 
	  * которых необходимо подключить
	  *
	  * @var array
	  */
	 
	 public $jsClasses = array();	 
	 
	 /**
	  * Содержит коректность хода работы скрипта
	  *
	  * @var Auth
	  */
	 
	 public $prefix;
	 
	 /**
	  * Содержит коректность хода работы скрипта
	  *
	  * @var boolean
	  */
	 	
	 protected $valid  = true;

	 /**
	  * Указывает или скрипт защещён авторизацией  по умолчанию false
	  *
	  * @var boolean
	  */
	 	
	 protected $secure = false;

	 /**
	  * Указывает проводить ли проверку входных параметров по умолчанию true
	  *
	  * @var boolean
	  */
	 	
	 protected $check_params = true;

	 /**
	  * Указывает выполнять ли в начале скрипта cache. по умолчанию true
	  *
	  * @var boolean
	  */
	 	
	 public $cache_execute = true;

	 /**
	  * Масив названий переменых которых не нужно проверять автоматически на коректность
	  *
	  * @var array
	  */
	 	
	 protected $check_not_array = array();

	 /**
	  * Содержит название центрального темплейта по умолчанию main.tpl
	  *
	  * @var string
	  */
	 	
	 protected $template = 'main.tpl';

	 /**
	  * Указывает выводить ли на темплейты в браузер; false - выводятся, true - не выводятся
	  *
	  * @var boolean
	  */
	 	
	 public $silent = false;

	 /**
	  * Содержит content type которым будет выводится скрипт в браузер, по умолчанию text/html
	  *
	  * @var string
	  */
	 
	 protected $content_type = 'text/html';

	 /**
	  * Кодировка страницы, по умолчанию Windows-1251
	  *
	  * @var string
	  */
	 
	 protected $charset = 'Windows-1251';

	 /**
	  * Заставить контролер вызвать Prepare при выполнение POST обработки
	  *
	  * @var boolean
	  */
	 
	 public $forcePrepare=false;

	 /**
	  * Содержит название главного темвлейта скрипта
	  *
	  * @var string
	  */
	 	
	 protected $indexTemplate='index.tpl';
	 
	 /**
	  * Содержить ip пользователя, который вызвал скрипт, в открытом формате хххх.хххх.хххх.хххх
	  *
	  * @var string
	  */
	 
	 protected $remote_addr_str;
	 
	 /**
	  * Содержить ip пользователя, который вызвал скрипт, в цыфровом формате
	  *
	  * @var integer
	  */
	 
	 protected $remote_addr;
	 
	 /**
	  * Содержить defualt директорию для системы темплейтов
	  *
	  * @var integer
	  */
	 
	 protected $template_dir_default = 'ria';
	 
	 /**
	  * Масив глобальных настроек
	  *
	  * @var array
	  */
	 
	 protected $options;
	 
	 
	 /**
	  * Масив ошибок
	  *
	  * @var array
	  */
	 
	 protected $_errors = array();
	 
	/**
     * Database connection
     * @var ADOConnection
     */
//    private $connection = null;	
    
	/**
     * RewriteManager
     * @var RewriteManager
     */
    public $RewriteManager = null;	
	
    public $target;

    public $event;
    
    public $ria_client;
    
	 /**
	  * Функция выборки входных параметров с масива param
	  *
	  * @param string $field название параметра
	  * @return array значение параметра
	  */
	function __get($field) 
	{
		return $this->param[$field];
	}

	/**
	 * Функция установки входных параметров в масив param
	 *
	 * @param string $field название параметра
	 * @param mixed $value значение параметра
	 */
	
	function __set($field,$value)
	{
		$this->param[$field]=$value;
	}

	
	
	/**
	 * Setup Options
	 */
	protected function setup_options() {
		global $options;
		
		if (!is_object($this->RewriteManager)) { $this->trigger_error('RewriteManager not Started!'); }
		$this->options['multilanguage']=$options['core']['multilanguage'];
		$this->options['multitemplates']=$options['core']['multitemplates'];
		$this->options['foldertemplates']=$options['core']['foldertemplates'];
		$this->options['ip_chack']=$options['core']['ip_chack'];
		$this->options['auth']=$options['core']['auth'];
		$GLOBALS['_NG_MODULES_CONFIG_']=$options['core']['ng_modules'];
		if ($options['core']['template_dir_default']!='') {
			$this->template_dir_default = $options['core']['template_dir_default'];
		}
		if ($options['site']['base_url'] != '') {
			$this->base_url=$options['site']['base_url'];
		}
    	 
		$this->setup_remote_addr();
	}
	
	/**
	 * Setup Web parameters
	 */
	protected function setup_params() {
		$arr=array_merge($_GET,$this->RewriteManager->path_assoc,$_POST);

		$this->target = $this->RewriteManager->target;
		$this->event = $this->RewriteManager->event;
		$this->skin = $this->RewriteManager->skin;
		unset($arr['target']);
		unset($arr['event']);
		unset($arr['skin']);
		foreach ($arr as $key=>$item) {
    	 	if ($this->check_params && (array_search($key,$this->check_not_array)===false)) {
	    	 	if (is_array($item)) {
	    	 		if (array_search($key,$this->param_str)===false) {
	    	 			$item=$this->checkArray($item,'int');
	    	 		} else {
	    	 			$item=$this->checkArray($item,'str');
	    	 		}
	    	 	} else {
	    	 		if (array_search($key,$this->param_str)===false) {
		    	 		$item*=1;
	    	 		} else {
	    	 			$item=$this->checkTextForMysql($item);
	    	 		}
	    	 	}
    	 	}
    	 	$this->param[$key]=$item;
		}
	}
	

	/**
	 * Setup Prefix
	 */
	protected function setup_prefix() {
		$prefix='';
		if ($_SERVER['SCRIPT_NAME']!='index.php') {
    		$f=strrpos($_SERVER['SCRIPT_FILENAME'],"/");
    		$prefix=substr($_SERVER['SCRIPT_FILENAME'],$f+1,strlen($_SERVER['SCRIPT_FILENAME'])-$f-5);	
    		$prefix=strtolower($prefix);
    		if ($prefix=='index')
    		{
    			if ($options['core']['templetes_prefix'])
    			{
    				$prefix=$options['core']['templetes_prefix'];
    			}else{
    				$prefix='';
    			}
    		}else{
    			$prefix.='/';
    			$this->options['multitemplates']=0;
    		}
    		$this->prefix=$prefix;
    	}
	}
	
	/**
	 * Setup Multitemplates
	 */
	protected function setup_multitemplates() {
	    	 if ($this->skin!='' && $this->skin!=-1)
	    	 {
	    	 	$_SESSION['RIA']['skin']=$this->skin;
	    	 	setcookie('skin',$this->skin,time()+60*60*24*365);
	    	 }else{
	    	 	if ($_COOKIE['skin'] && !$_SESSION['RIA']['skin'])
	    	 	{
	    	 		$_SESSION['RIA']['skin']=$_COOKIE['skin'];
	    	 	}
	    	 	if ($this->skin==-1)
	    	 	{
	    	 		$_SESSION['RIA']['skin']='';
	    	 		setcookie('skin',$this->skin,time());
	    	 	}
	    	 }
	    	 
	    	 $this->partner_id = $this->RewriteManager->partner_id;
	}
	
	private function setupRiaClient(){
		Ria_Client::getInstance()->register('Client', new ClientManager(),array('isAuthed'));
    	Ria_Client::getInstance()->register('Session', new SessionManager());
		Ria_Client::getInstance()->restoreSession();
		$this->ria_client = Ria_Client::getInstance();
	}
	
	/**
	 * Основной метод управления работой скрипта, который запускается скразу после инициализации диалогов
	 *
	 */
	public function handleRequest() {    	

		$this->setup_options();
    	
		if ($this->options['ip_chack'] && $GLOBALS['riaZoneType'] !='crontab') {
			$ip_manager = new ip();
			$ip_manager->getCityFromIP(REMOTE_ADDR);
		}
		
		$this->setup_params();
		
		$this->setupRiaClient();

		//func_log(print_r($this,true),'_traceCore',LOG_INFO);
		
		$this->setup_prefix();
    	 
		if ($this->options['multitemplates']) {
			$this->setup_multitemplates();
		}
		 if ($this->options['multilanguage'])
    	 {
    	 	
    	 	$this->mLanguage();
    	 }
    	 
		if ($this->options['auth']) {
			if ($this->exit=='yes') {
				Ria_Client::getInstance()->Client->logout();
				Ria_Client::getInstance()->clearSession();
			}
	    	 
			$isLogged = Ria_Client::getInstance()->Client->isAuthed();
	    	 
	    	 // if required, check for the logged user and redirect to login page
	        if ($this->isSecure() && !$isLogged && $_REQUEST['target'] != 'login') {
	            $this->redirect($this->getLoginUrl()); 
	            exit();
	        }
    	 }

    	// WEB Session
    	if ($GLOBALS['options']['core']['webSessionEnable']) {
            Ria_Client::getInstance()->register('WebSession', new WebSessionManager());
    	}    
    	 
	 	if ($this->cache_execute)
		{
			$cache =new Cache();
			$cache->init(&$this);
		}
    	 if ($_SERVER['REQUEST_METHOD'] == 'GET' || $this->forcePrepare === true) {
            
			$this->prepare();
        }
         // invoke action handler
         
        if (isset($_REQUEST['action'])) {
            // validate form data first
             $this->action = $_REQUEST['action'];
            $method = 'validate_' . $this->action;
            if (method_exists($this, $method))
            {
            	$this->$method();
            }
               //$this->validate();
            // call action handler
            if ($this->valid) {
    			
                $method = 'action_' . $this->action;
                method_exists($this, $method) or trigger_error('Invalid action: '. $this->action,E_USER_ERROR);
                $this->$method();
            }
        }
        // redirect after valid POST or action
        
        if (($_SERVER['REQUEST_METHOD'] == 'POST' || isset($_REQUEST['action'])) && $this->valid) {
            $this->redirect();
        }elseif (($_SERVER['REQUEST_METHOD'] == 'POST' || isset($_REQUEST['action'])) && !$this->valid)
        {
        	$this->prepare();
        }
         if ($GLOBALS['options']['logger']['profiler'] && ($_SESSION['profiler_enable'] || $this->profiler_enable)){
         	 $this->profile_enable =true;
         }
        if (!$this->silent) {
        	$this->jsClassesBuilder();
        	$this->display();
        	flush();
        }
        if ($GLOBALS['options']['logger']['profiler'] && ($_SESSION['profiler_enable'] || $this->profiler_enable)){
        	func_profiler();
        }
    }
 
    
    /**
     * Рекурсивная проверка входных параметров переданых как масив
     *
     * @param array $array
     * @param string $type
     */
    
    function checkArray($array,$type)
    {
    	foreach ($array as $key=>$item)
    	{
    		if (gettype($item)=='array')
    		{
    			$array[$key]=$this->checkArray($item,$type);
    		}else{
    			if ($type=='str')
    			{
    				$array[$key]=$this->checkTextForMysql($item);
    			}else{
    				$array[$key]=$item*1;
    			}
    		}
    	}
    	return $array;
    }
    
 
    /**
     * Метод управления мультиязычностю скрипта
     */
    public function mLanguage() { $this->RewriteManager->setup_languages($_SESSION['person_id']); $this->setup_charset(); }
    
    /**
     * Метод-заглушка который переопредиляется в наследниках-диалогах и вызывается первым после иницыализации диалога
     */
	public function prepare() {}

    /**
     * Метод производить перенаправление на входящий url
     * @param string $url
     */
    public function redirect($url = null) {
        $this->silent = true;
        header('Location: ' . (!is_null($url) ? $url: $this->getURL()));
    }
    
     /**
     * Composes URL for the concrete controller using controller parameters.
     *
     * @return string
     */
    public function getURL() {
        if (isset($this->returnUrl)) {
            return $this->returnUrl;
        }
        $url = $this->getForwardIndex();
        $params = array();
        foreach ($this->params as $param) {
            if (isset($this->$param)) {
                $params[] = $param . '=' . $this->$param;
            }
        }
        if (!empty($params)) {
            $url .= '?' . implode('&', $params);
        }
        return $url;
    }

    /**
     * Returns forwad index for this controller
     */
    private function getForwardIndex() { return FORWARD_INDEX; }
    
    /**
     * Метод-заглушка валидации данный
     *
     */
    public function validate() {
        //require_once 'Validate.php';
    }
    
    /**
     * Возвращает template_dir для системы темплейтов который определяется в конфиге
     * @return string
     */
    private function getSkinDir() { return $GLOBALS['options']['smarty']['template_dir']; }
    
     /**
     * Returns index template name
     * 
     * @return string
     */
    private function getIndexTemplate()
    {
    	
    	if ($this->options['multitemplates'])
    	{
    		if ($_SESSION['partner_id'])
	    	{
	    		$this->partner_id=$_SESSION['partner_id'];
	    	}
	    	
	    	if ($this->partner_id)
	    	{
	    		if ($_SESSION['partner_id'] && $_SESSION['template_dir']!='')
	    		{
	    			return $this->prefix.$_SESSION['template_dir']."/".$this->getScinTemplates().$this->indexTemplate;
	    		} else {
	    			$data = $this->RewriteManager->get_partner_info($this->partner_id);
		    		if ($data['template_dir']) {
		    			$_SESSION['partner_id']=$this->partner_id;
		    			$_SESSION['template_dir']= $data['template_dir'];
		    			return $this->prefix.$data['template_dir']."/".$this->getScinTemplates().$this->indexTemplate;
		    		}else{
		    			return $this->prefix.$this->template_dir_default.'/'.$this->getScinTemplates().$this->indexTemplate;	
		    		}
	    		}
	    	}else{
	        	return $this->prefix.$this->template_dir_default.'/'.$this->getScinTemplates().$this->indexTemplate;
	    	}
    	}else{
    		return $this->prefix.$this->indexTemplate;
    	}
    }
  
    /**
     * Возвращает путь к индексный темплейту при использовании системы наследования темплейтов
     * 
     * @return string
     */
    private function getInheritTemplate()
    {
    	
    	if ($this->options['multitemplates'])
    	{
    		if ($_SESSION['partner_id'])
	    	{
	    		$this->partner_id=$_SESSION['partner_id'];
	    	}
	    	
	    	if ($this->partner_id)
	    	{
	    		if ($_SESSION['partner_id'] && $_SESSION['template_dir']!='')
	    		{
	    			return $this->prefix.$_SESSION['template_dir']."/".$this->getScinTemplates().$this->getFolderTemplates().$this->template;
	    		} else {
	    			$data = $this->RewriteManager->get_partner_info($this->partner_id);
		    		if ($data['template_dir']) {
		    			$_SESSION['partner_id']=$this->partner_id;
		    			$_SESSION['template_dir']= $data['template_dir'];
		    			return $this->prefix.$data['template_dir']."/".$this->getScinTemplates().$this->getFolderTemplates().$this->template;
		    		}else{
		    			return $this->prefix.$this->template_dir_default.'/'.$this->getScinTemplates().$this->getFolderTemplates().$this->template;	
		    		}
	    		}
	    	}else{
	        	return $this->prefix.$this->template_dir_default.'/'.$this->getScinTemplates().$this->getFolderTemplates().$this->template;
	    	}
    	}else{
    		return $this->prefix.$this->getFolderTemplates().$this->template;
    	}
    }
    
    
    /**
     * Создает кеширующий файл JavaScript-классов
     * (если они были определены) для MooTools 1.2
     *
     */
    protected function jsClassesBuilder() {
    	if ($this->isJsClassesCount()) {
    		
    		$jsClasses = new JsClasses();
            $jsClasses->setClassesPath(array('../application/classes/js','../../core2/js'));
    		
    		if (isset($GLOBALS['options']['jsClasses']['compressMode'])) {
    			$jsClasses->setCompressMode($GLOBALS['options']['jsClasses']['compressMode']);
    		}

    		if (isset($GLOBALS['options']['jsClasses']['gzipFileMode'])) {
    			$jsClasses->setGzipFileMode($GLOBALS['options']['jsClasses']['gzipFileMode']);
    		}
    		
    		if (isset($GLOBALS['options']['jsClasses']['checkClassModifyTime'])) {
    			$jsClasses->setCheckClassModifyTime($GLOBALS['options']['jsClasses']['checkClassModifyTime']);
    		}
    		
    		# Check last modify time mode
    		if ($this->setCheckClassModifyTime) {
    			$jsClasses->setCheckClassModifyTime(true);
    		}
    		
    		$jsClasses->make($this->jsClasses);
    		$this->classesJsFileName = $jsClasses->getJsFileName();
    		
    	}
    }
    
    /**
     * Производит иницыализацию и вывод основного темплейта Smarty
     */
    protected function display() {
    	
        func_log('display()', get_class($this), LOG_INFO);
        // send no-cache headers
        
        header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
        header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
        header('Cache-Control: no-store, no-cache, must-revalidate');
        header('Cache-Control: post-check=0, pre-check=0', false);
        header('Pragma: no-cache');
        
        header('Content-Type: '.$this->content_type.'; charset='.$this->charset);
		if ($this->options['multilanguage']) {
		    if ($GLOBALS['options']['smarty']['inherit']){
		       require_once 'SmartyInherit.php';
        	   $smarty = new SmartyInherit();
		    } else {
        	   require_once 'SmartyML.db.php';
        	   $smarty = new SmartyML();
		    }

		} else {
			require_once 'Smarty.class.php';
            $smarty = new Smarty();
		}
        $smarty->plugins_dir = $this->smarty_plugins_dir;
        //$smarty->config_dir    = $this->getSkinDir();
        $smarty->template_dir  = $this->getSkinDir();
        $smarty->compile_dir   = $GLOBALS['options']['smarty']['compile_dir'];
        $smarty->compile_check = $GLOBALS['options']['smarty']['compile_check'];
        $smarty->debugging     = $GLOBALS['options']['smarty']['debugging'];
		$smarty->config_dir     = $GLOBALS['options']['smarty']['config_dir'];
        // assign dialog properties to smarty

        // dialog itself
        $smarty->assign_by_ref("dialog", $this);
        // other variables
        $param_arr=array_merge($this->param,get_object_vars($this));
        foreach ($param_arr as $name => $value) {
            if (is_object($this->$name)) {
                $smarty->assign_by_ref($name, $this->$name);
            } else {
                $smarty->assign($name, $this->$name);
            }
        }
        // render and output presentation
        if ($GLOBALS['options']['smarty']['inherit']){
            $smarty->display($this->getInheritTemplate());
        } else {
            $smarty->assign('center', $this->getTemplate());
            $smarty->display($this->getIndexTemplate());
        }  
    }
    
    /**
     * Отвечает за вставку центрального темплейта сайта
     * @param string $templates
     * @return string
     */
    public function getTemplate($templates='',$special_dir=null)  {
		
        if ($templates=='') {
        	$templates=$this->template;
        }
        
        if ($this->options['multilanguage']) {
	        require_once 'SmartyML.db.php';
	        $smarty = new SmartyML();
		} else {
			require_once 'Smarty.class.php';
            $smarty = new Smarty();
		}
        $smarty->plugins_dir = $this->smarty_plugins_dir;
        //$smarty->config_dir    = $this->getSkinDir();
        $smarty->template_dir  = $this->getSkinDir();
        $smarty->compile_dir   = $GLOBALS['options']['smarty']['compile_dir'];
        $smarty->compile_check = $GLOBALS['options']['smarty']['compile_check'];
        $smarty->debugging     = $GLOBALS['options']['smarty']['debugging'];
        $smarty->config_dir     = $GLOBALS['options']['smarty']['config_dir'];

        // assign dialog properties to smarty

        // dialog itself
        $smarty->assign_by_ref("dialog", $this);
        // other variables
        $param_arr=array_merge($this->param,get_object_vars($this));
        foreach ($param_arr as $name => $value) {
            if (is_object($this->$name)) {
                $smarty->assign_by_ref($name, $this->$name);
            } else {
                $smarty->assign($name, $this->$name);
            }
        }

        if (isset($special_dir)) {
        	return $smarty->fetch($this->prefix.$special_dir.$templates);
        }
       
        if ($this->options['multitemplates'])
        {
	        $this->partner_id*=1;
	        
	        if ($this->partner_id && $_SESSION['template_dir']=='')
	        {
	        	$data=$this->RewriteManager->get_partner_info($partner_id=0);
		    	if ($data['template_dir']) {
		    		$_SESSION['partner_id']=$this->partner_id;
		    		$_SESSION['template_dir']= $data['template_dir'];
		    	}
	        }
	   
	        // render and output presentation
			if ($_SESSION['template_dir']!='')
			{
	        	return $smarty->fetch($this->prefix.$_SESSION['template_dir'].'/'.$this->getScinTemplates().$this->getFolderTemplates().$templates);
			}else{
				return $smarty->fetch($this->prefix.$this->template_dir_default.'/'.$this->getScinTemplates().$this->getFolderTemplates().$templates);
			}
        }else{
        	return $smarty->fetch($this->prefix.$this->getFolderTemplates().$templates);
        }
    }
    
    /**
     * Возвращает название деректории для системы темплейтов при включоном foldertemplates
     * @return string
     */
    protected function getFolderTemplates() {
    	if ($this->options['foldertemplates']) {
    		return $this->target.'/';
    	}
    	return '';
    }
    
    
     /**
     * Возвращает название скина для системы темплейтов который определяется в конфиге
     * @return string
     */
    private function getScinTemplates() {
    	if ($_SESSION['RIA']['skin']) {
    		return $_SESSION['RIA']['skin'].'/';
    	}
    	return '';
    }
    
 
   /**
     * Returns secure flag for concrete controller.
     * Could be overridden for more flexibility (such as secure actions)
     * 
     * @return boolean
     */
   public  function isSecure() { return $this->secure; }
    
    /**
     * Возвращает урл страницы залогирования
     * @return string
     */
   public  function getLoginUrl() { return FORWARD_LOGIN; }
    
    /**
     * Utility method to validate and add validation error property.
     * Checks whether the named prperty is set end is not empty in POST data.
     *
     * @param string $param  property name to validate
     * @param string $suffix  suffix for error property
     */
   public  function addErrorIfEmpty($param, $suffix = '_required')
    {
        if (!isset($_POST[$param]) || !strlen(trim($_POST[$param]))) {
            $this->valid = false;
            $name = $param . $suffix;
            $this->$name = true;
        }        
    }
    
    /**
     * Екранирует входные параметры
     *
     * @param string $text значение входного параметра
     * @param boolean $strip_tags удалять или нет теги
     * @return string
     */
    public function checkTextForMysql($text,$strip_tags=true) {	
    	return $this->RewriteManager->checkTextForMysql($text,$strip_tags);
    }
    
    /**
     * Устанавливаются в константи REMOTE_ADDR(числовое значение) и REMOTE_ADDR_STR значение IP
     */
	public function setup_remote_addr() {
		$this->remote_addr_str = REMOTE_ADDR_STR; 
		$this->remote_addr     = REMOTE_ADDR;
	}
	/**
	 * Устанавливает кодировку для вывода заголовка при генерации HTML-страницы
	 *
	 */
	public function setup_charset() {
		if (strlen($GLOBALS['options']['locale']['charset'])) {
			$this->charset = $GLOBALS['options']['locale']['charset'];
		}
		
		if ($_SESSION['lang_web_charset']!='') {
			$this->charset = $_SESSION['lang_web_charset'];
		} elseif ($this->charset) {
		     $_SESSION['lang_web_charset'] = $this->charset;
		}
	}
    
	/**
	 * Get Params Array
	 *
	 * @return unknown
	 */
	public function getParams() {
		return $this->param;
	}

/*	*//**
	 * Add JavaScript Class
	 *
	 * @param string $jsClass
	 *//*
	public function addJsClass($jsClass) {
		array_push($this->_jsClasses,$jsClass);
	}
*/
	/**
	 * Add JavaScript Classes
	 *
	 * @param mixed $jsClasses
	 */
	public function addJsClasses($jsClasses) {
		$this->jsClasses = array_merge($this->jsClasses, (array)$jsClasses);
	}
	
	/**
	 * Return JavaScript Classes Count
	 *
	 * @return integer
	 */
	public function isJsClassesCount() {
		return count($this->jsClasses);
	}
	
}
?>